Guess number higher or lower

Time: O(LogN); Space: O(1); easy

We are playing the Guess Game. The game is as follows:

I pick a number from 1 to n. You have to guess which number I picked.

Every time you guess wrong, I’ll tell you whether the number is higher or lower.

You call a pre-defined API guess(int num) which returns 3 possible results (-1, 1, or 0):

  • -1 : My number is lower

  • 1 : My number is higher

  • 0 : Congrats! You got it!

Example 1:

Input: n = 10 (pick = 6)

Output: 6

1. Binary Search [O(LogN), O(1)]

[14]:
class Solution1(object):
    """
    Time: O(LogN)
    Space: O(1)
    """
    my_number = 6

    def guess(self, n):
        if self.my_number == n:
            return 0
        elif self.my_number > n:
            return 1
        else:
            return -1

    def guessNumber(self, n):
        """
        :type n: int
        :rtype: int
        """
        left, right = 1, n

        while left <= right:
            mid = left + (right - left) // 2
            if self.guess(mid) <= 0:
                right = mid - 1
            else:
                left = mid + 1

        return left
[15]:
s = Solution1()

n = 10    # pick = 6
assert s.guessNumber(n) == 6

# n = 10  # pick = 4
# assert s.guessNumber(n) == 4